package com.crm.web.action;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;

import com.crm.dao.LinkManDao;
import com.crm.domain.Customer;
import com.crm.domain.LinkMan;
import com.crm.domain.PageBean;
import com.crm.service.CustomerService;
import com.crm.service.LinkManService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

/**
 * @author Yusei
 * 联系人Action
 */
public class LinkManAction extends ActionSupport implements ModelDriven<LinkMan>{
	private LinkMan linkMan = new LinkMan();
	
	@Override
	public LinkMan getModel() {
		return linkMan;
	}
	
	// 注入service
	private LinkManService linkManService;
	/*public void setLinkMan(LinkMan linkMan) {
		this.linkMan = linkMan;
	}*/
	public void setLinkManService(LinkManService linkManService) {
		this.linkManService = linkManService;
	}
	
	// 注入CustomerService
	private CustomerService customerService;
	public void setCustomerService(CustomerService customerService) {
		this.customerService = customerService;
	}
	
	// 分页功能
	// 1. 接收当前页和每页显示记录数
	private Integer currPage = 1;
	private Integer pageSize = 3;
	// 如果浏览器没有传当前页，默认为第一页
	public void setCurrPage(Integer currPage) {
		if (currPage == null) {
			currPage = 1;
		}
		this.currPage = currPage;
	}
	
	// 如果浏览器没有传页面大小，默认为3
	public void setPageSize(Integer pageSize) {
		if (pageSize == null) {
			pageSize = 3;
		}
		this.pageSize = pageSize;
	}

	// 联系人列表
	public String findAll(){
		// detachedCriteria：离线条件查询
		DetachedCriteria detachedCriteria = DetachedCriteria.forClass(LinkMan.class);
		// 条件查询
		// 按名称查询
		if (linkMan.getLkm_name()!=null) {
			// 注意格式，这种应该是类似于like xxx这样
			detachedCriteria.add(Restrictions.like("lkm_name", "%"+ linkMan.getLkm_name() +"%"));
		}
		// 如果没选性别的话，不添加多一个判断条件的话可能出现查询不到的情况
		if (linkMan.getLkm_gender() != null && !"".equals(linkMan.getLkm_gender())) {
			// 这种where xxx = xxx的话，格式是这样的
			detachedCriteria.add(Restrictions.eq("lkm_gender", linkMan.getLkm_gender()));
		}
		// 分页查询
		PageBean<LinkMan> pageBean = linkManService.findByPage(detachedCriteria, currPage, pageSize);
		// 返回查询结果到浏览器
		ActionContext.getContext().getValueStack().push(pageBean);
		return "findAll";
		
	}
	
	// 跳转到添加联系人页面
	public String saveUI(){
		// 查询所有客户，返回到浏览器
		List<Customer> list = customerService.findAll();
		ActionContext.getContext().getValueStack().set("list", list);
		return "saveUI";
	}
	
	// 保存联系人
	public String save(){
		linkManService.save(linkMan);
		return "saveSuccess";
	}
	
	// 删除联系人
	public String delete(){
		// 先获得联系人
		linkMan = linkManService.findById(linkMan.getLkm_id());
		// 删除
		linkManService.delete(linkMan);
		return "deleteSuccess";
	}
	
	// 跳转到修改联系人页面
	public String edit(){
		// 查询所有客户（因为客户列表的原因）
		List<Customer> list = customerService.findAll();
		// 根据id查询要修改的联系人的信息
		linkMan = linkManService.findById(linkMan.getLkm_id());
		// 将list和linkman返回到页面
		ActionContext.getContext().getValueStack().set("list", list);
		// 将对象的值存入值栈
		// 如果使用上面那种方法，取值的话是model.XXX
		// 使用这种方法的话，只要jsp上面的name和对象的值对应的话，就会自动回显
		ActionContext.getContext().getValueStack().push(linkMan);
		return "editUI";
	}
	
	// 保存修改后的联系人信息
	public String update(){
		linkManService.update(linkMan);
		return "updateSuccess";
	}
	
}
